'''
    自动取款机的存取款模拟：
    1、取款信息数据
    2、查询当前账户信息
    3、账户存钱
    4、账户取钱
    5、查询所有账户信息
    5、登录和退出
    6、界面和交互
'''

# 1、取款信息数据
account_list = [
    {'name':'zhangsan','money':1000},
    {'name':'lisi','money':2000},
    {'name':'wangwu','money':3000}
]


# 2、查询余额信息
def show_account_money(name):
    # 循环遍历列表，判断传入的姓名是否在列表中，若是在列表中，则变更账户额度，否则，则添加新的账户
    flag = False
    for account in account_list:
        if account['name'] == name:
            flag = True # 找到了
            print('{:<10}|{:^10}|'.format('name','money'))
            print('{:<10}|{:^10}|'.format(account['name'],account['money']))
            break
    return


# 3、存钱
def add_money(name,money):
    # 循环遍历列表，判断传入的姓名是否在列表中，若是在列表中，则变更账户额度，否则，则添加新的账户
    flag = False
    for account in account_list:
        if account['name'] == name:
            flag = True # 找到了
            account['money'] = account['money'] + int(money)
            break
    if not flag:
        print('你是新用户，将为你新注册账户!')
        register_account(name,money)
    return

# 4、取钱
def decrease_money(name,money):
    # 判断是否有该用户，若有该用户，则对余额进行变更，若没有该用户，则进行提示
    # 对已存在用户的余额进行变更的时候，判断变更之后的余额是否为负值，若是为负值，则进行相应提醒：余额不足
    # 循环遍历列表，判断传入的姓名是否在列表中，若是在列表中，则变更账户额度，否则，则添加新的账户
    flag = False
    for account in account_list:
        if account['name'] == name:
            flag = True # 找到了
            sub_money = account['money'] - int(money)
            if sub_money < 0:
                print('对不起',account['name'],'账户余额不足！')
            else:
                account['money'] = account['money'] - int(money)
            break
    if not flag:
        print('对不起，该用户不存在！')

    return



# 5、登录和退出
def loginOut():
    print('=' * 12, '再见', '=' * 12)

    return


# 注册新账户
def register_account(name,money):
    account_dict = {}
    account_dict['name'] = name
    account_dict['money'] = money
    account_list.append(account_dict)
    print('新注册账户成功！')
    return


# 目前所有账户信息
def show_all_account_money():
    if len(account_list) == 0:
        print('='*20,'没有账户信息','='*20)
        return

    print('|{0:<5}|{1:<10}|{2:<5}|'.format('sid','name','money'))
    print('-'*40)

    for id,account_dict in enumerate(account_list):
        print('|{0:<5}|{1:<10}|{2:<5}|'.format(id+1, account_dict['name'], account_dict['money']))


#  6、界面与交互
while True:
    # 输出初始界面
    print('='*12,'账户存取款管理系统','='*12)
    print('{:<16} {:<30}'.format('1.查看所有账户信息','2.查看账户信息'))
    print('{:<20} {:<30}'.format('3.存钱','4.取钱'))
    print('{:<20}'.format('5.退出'))
    print('=' * 40)
    key = input('请输入对应的选项：')
    # 根据输入操作值，执行对应操作
    if key == '1':
        print('=' * 12, '显示所有账户信息', '=' * 12)
        show_all_account_money()
        input('按回车继续：')

    elif key == '2':
        print('='*12,'查看余额信息','='*12)

        account_name = input('请输入账户姓名：')
        show_account_money(account_name)

        input('按回车继续：')

    elif key == '3':
        print('='*12,'存钱','='*12)

        account_name = input('请输入账户姓名：')
        print('该账户的信息如下：')
        show_account_money(account_name)

        account_money = input('请输入存款额度：')
        add_money(account_name,account_money)

        print('该账户最新信息如下：')
        show_account_money(account_name)

        input('按回车继续：')

    elif key == '4':
        print('='*12,'取钱','='*12)

        account_name = input('请输入你的姓名：')
        print('该账户的信息如下：')
        show_account_money(account_name)

        account_money = input('请输入你要取出的额度：')
        decrease_money(account_name,account_money)

        print('该账户最新信息如下：')
        show_account_money(account_name)

        input('按回车继续：')

    elif key == '5':
        loginOut()
        break

    else:
        print('=' * 12, '操作无效，请输入正确的选项！', '=' * 12)
        input('按回车继续：')
